"""
通用工具函数模块，提供项目中可能用到的辅助函数
"""
import os
import json
import random
import string
import time
import logging
from datetime import datetime
from tests.config.config import TEST_DATA_DIR


def load_test_data(file_name):
    """
    从JSON文件加载测试数据
    
    Args:
        file_name: 数据文件名（相对于test_data目录）
    
    Returns:
        加载的JSON数据
    """
    file_path = os.path.join(TEST_DATA_DIR, file_name)
    logging.info(f"加载测试数据: {file_path}")
    
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return json.load(file)
    except Exception as e:
        logging.error(f"加载测试数据失败: {file_path}, 错误: {e}")
        return {}


def generate_random_string(length=8):
    """
    生成指定长度的随机字符串
    
    Args:
        length: 字符串长度，默认为8
    
    Returns:
        随机生成的字符串
    """
    characters = string.ascii_letters + string.digits
    return ''.join(random.choice(characters) for _ in range(length))


def generate_random_email():
    """
    生成随机邮箱地址
    
    Returns:
        随机生成的邮箱地址
    """
    username = generate_random_string(8)
    domains = ["example.com", "test.com", "mailtest.net", "automation.org"]
    return f"{username}@{random.choice(domains)}"


def wait(seconds):
    """
    等待指定的秒数
    
    Args:
        seconds: 等待秒数
    """
    logging.info(f"等待 {seconds} 秒")
    time.sleep(seconds)


def get_current_timestamp():
    """
    获取当前时间戳
    
    Returns:
        当前时间的格式化字符串
    """
    return datetime.now().strftime("%Y-%m-%d_%H-%M-%S")


def save_text_to_file(text, file_name):
    """
    将文本保存到文件
    
    Args:
        text: 要保存的文本
        file_name: 文件名
    
    Returns:
        保存的文件路径
    """
    if not os.path.exists(TEST_DATA_DIR):
        os.makedirs(TEST_DATA_DIR)
        
    file_path = os.path.join(TEST_DATA_DIR, file_name)
    
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(text)
        logging.info(f"文本已保存到文件: {file_path}")
        return file_path
    except Exception as e:
        logging.error(f"保存文本到文件失败: {file_path}, 错误: {e}")
        raise 